package com.br.planningrun.repositorio;

import java.util.ArrayList;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;

import com.br.planningrun.entidade.TipoExercicio;

public class RepositorioTipoExercicio {
	// Atributos
	private Context context;
	private SQLiteDatabase db2 = null;
	private SQLiteStatement stmt = null;
	private Cursor c = null;
	
	private static final String NOME_TABELA = "tb_TipoExercicio";
	private static final String BANCO = "planningrun";

	// Construtor
	public RepositorioTipoExercicio(Context context) {
		this.context = context;
	}
	
	public int getMaxId() {
		int retorno = 0;
		try {
			db2 = context.openOrCreateDatabase(BANCO, 0, null);
			c = db2.rawQuery("SELECT MAX(codigo) as maximo FROM " + NOME_TABELA + ";",
					null);

			c.moveToNext();
			retorno = c.getInt(c.getColumnIndex("maximo"));
			
    	} finally {
    		if (stmt != null) {
        		stmt.close();
        	}
        	
        	if (c != null) {
        		c.close();
        	}
        	
        	if (db2 != null) {
        		db2.close();
        	}
    	}
		
		return retorno;

	}

	// Inserir objeto
	public void inserir(TipoExercicio TipoExercicio) {
		try {
			db2 = context.openOrCreateDatabase(BANCO, 0, null);

			stmt = db2.compileStatement("INSERT INTO " 
					+ NOME_TABELA + " (sigla, descricao) "
					+ "VALUES (?, ?);");

			stmt.bindString(1, TipoExercicio.getSigla());
			stmt.bindString(2, TipoExercicio.getDescricao());

			stmt.execute();
    	} finally {
    		if (stmt != null) {
        		stmt.close();
        	}
        	
        	if (c != null) {
        		c.close();
        	}
        	
        	if (db2 != null) {
        		db2.close();
        	}
    	}
	}

	// Atualizacao do objeto
	public void atualizar(TipoExercicio TipoExercicio) {
		try {
			db2 = context.openOrCreateDatabase(BANCO, 0, null);

			stmt = db2.compileStatement("UPDATE " + NOME_TABELA 
					+ " SET " + "descricao = ?"
					+ " WHERE sigla = ?;");

			stmt.bindString(1, TipoExercicio.getDescricao());
			stmt.bindString(3, TipoExercicio.getSigla());

			stmt.execute();
    	} finally {
    		if (stmt != null) {
        		stmt.close();
        	}
        	
        	if (c != null) {
        		c.close();
        	}
        	
        	if (db2 != null) {
        		db2.close();
        	}
    	}
	}

	// Remover objeto (Sigla)
	public void removerCodigo(String sigla) {
		try {
			db2 = context.openOrCreateDatabase(BANCO, 0, null);

			stmt = db2.compileStatement("DELETE FROM " 
					+ NOME_TABELA + " WHERE sigla = ?;");

			stmt.bindString(1, sigla);

			stmt.execute();
    	} finally {
    		if (stmt != null) {
        		stmt.close();
        	}
        	
        	if (c != null) {
        		c.close();
        	}
        	
        	if (db2 != null) {
        		db2.close();
        	}
    	}
	}

	// Remover objeto (WHERE)
	public void remover(String where) {
		try {
			db2 = context.openOrCreateDatabase(BANCO, 0, null);

			stmt = db2.compileStatement("DELETE FROM " 
					+ NOME_TABELA + " " + where);

			stmt.execute();
    	} finally {
    		if (stmt != null) {
        		stmt.close();
        	}
        	
        	if (c != null) {
        		c.close();
        	}
        	
        	if (db2 != null) {
        		db2.close();
        	}
    	}
	}

	// Consulta do objeto (Sigla)
	public TipoExercicio procurar(String sigla) {
		ArrayList<TipoExercicio> lista = this.listar(" WHERE sigla = '" + sigla + "'");
		TipoExercicio TipoExercicio = null;
		if (lista.size() > 0) {
			TipoExercicio = lista.get(0);
		}
		return TipoExercicio;
	}

	// Listagem dos objetos
	public ArrayList<TipoExercicio> listar(String where) {
		ArrayList<TipoExercicio> lista = new ArrayList<TipoExercicio>();
		
		try {
			db2 = context.openOrCreateDatabase(BANCO, 0, null);
			c = db2.rawQuery("SELECT * FROM " + NOME_TABELA + " " + where + ";",
					null);

			while (c.moveToNext()) {
				TipoExercicio TipoExercicio = new TipoExercicio();
				TipoExercicio.setSigla(c.getString(c.getColumnIndex("sigla")));
				TipoExercicio.setDescricao(c.getString(c.getColumnIndex("descricao")));
				lista.add(TipoExercicio);
			}
    	} finally {
    		if (stmt != null) {
        		stmt.close();
        	}
        	
        	if (c != null) {
        		c.close();
        	}
        	
        	if (db2 != null) {
        		db2.close();
        	}
    	}

		return lista;
	}

	// Criacao da tabela
	public void truncate() {
		try {
			db2 = context.openOrCreateDatabase(BANCO, 0, null);
			// Exclusao da tabela se existir
			db2.execSQL("DROP TABLE IF EXISTS " + NOME_TABELA);
			// Criacao da tabela
			db2.execSQL("CREATE TABLE IF NOT EXISTS " + NOME_TABELA + "( sigla varchar2(255) NOT NULL PRIMARY KEY,"
					+ " descricao varchar2(255) );");
    	} finally {
    		if (stmt != null) {
        		stmt.close();
        	}
        	
        	if (c != null) {
        		c.close();
        	}
        	
        	if (db2 != null) {
        		db2.close();
        	}
    	}
	}
}